
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package itm.bo.lineaInvestigacion;

//~--- non-JDK imports --------------------------------------------------------
import itm.conexion.SQLServerConection;

import itm.dao.lineaInvestigacion.LineaInvestigacionDAO;

import itm.exception.ControlException;
import itm.exception.DAOException;
import itm.vo.file.ArchivoVO;
import itm.vo.grupoInvestigacion.GrupoInvestigacionVO;
import itm.vo.grupoInvestigacion.PaisVO;
import itm.vo.grupoInvestigacion.TipoEventoVO;
import itm.vo.lineaInvestigacion.EstadoComplementoLineaInvVO;
import itm.vo.lineaInvestigacion.LineaInvestigacionTO;
import itm.vo.lineaInvestigacion.LineaInvestigacionVO;
import itm.vo.lineaInvestigacion.ParAcademicoVO;

//~--- JDK imports ------------------------------------------------------------

import itm.vo.personas.PersonaVO;
import java.sql.Connection;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 */
public class LineaInvestigacionBO {

    LineaInvestigacionDAO lineaInvDAO = null;
    SQLServerConection conexion = new SQLServerConection();
    Connection dbConexion;

    public List<LineaInvestigacionVO> consultarLineaInv(LineaInvestigacionVO lineaInvVO) throws Exception {
        List<LineaInvestigacionVO> listaLinea = new ArrayList<LineaInvestigacionVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaLinea = lineaInvDAO.consultarLineaInv(lineaInvVO);
        } catch (Exception ex) {
            ex.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaLinea;
    }

    public LineaInvestigacionTO consultarLineaPK(LineaInvestigacionVO lineaInvVO) throws Exception {
        LineaInvestigacionTO lineaInvTO = new LineaInvestigacionTO();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            lineaInvTO = lineaInvDAO.consultarLineaPK(lineaInvVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return lineaInvTO;
    }

    public List<ParAcademicoVO> consultarPares(LineaInvestigacionVO lineaInvVO) throws Exception {
        List<ParAcademicoVO> listaPares = new ArrayList<ParAcademicoVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaPares = lineaInvDAO.consultarPares(lineaInvVO);
        } catch (Exception ex) {
            ex.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaPares;
    }

    public int guardarArchivoLinea(ArchivoVO archivoVO) throws Exception {
        int resultado = 0;

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.guardarArchivoLinea(archivoVO);
        } catch (Exception ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public int guardarFormularLinea(LineaInvestigacionVO lineaInvVO, EstadoComplementoLineaInvVO estCompLineaVO)
            throws Exception {
        int resultado = 0;

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.guardarFormularLinea(lineaInvVO, estCompLineaVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public String eliminarParesAcademicos(LineaInvestigacionVO lineaInvVO, ParAcademicoVO parAcademicoVO)
            throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.eliminarParesAcademicos(lineaInvVO, parAcademicoVO);
        } catch (Exception ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public String insertarGruposLinea(LineaInvestigacionVO lineaInvVO, GrupoInvestigacionVO grupoInvVO)
            throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.insertarGruposLinea(lineaInvVO, grupoInvVO);
        } catch (Exception ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public void insertarParesAcademicos(ParAcademicoVO parAcademicoVO, LineaInvestigacionVO lineaInvVO)
            throws Exception {
        

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            lineaInvDAO.insertarParesAcademicos(parAcademicoVO, lineaInvVO);
        } catch (Exception ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

    }

    public List<LineaInvestigacionVO> listarLineas() throws Exception {
        List<LineaInvestigacionVO> listaLineas = new ArrayList<LineaInvestigacionVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaLineas = lineaInvDAO.listarLineas();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaLineas;
    }

    public List<PaisVO> listarPaises() throws Exception {
        List<PaisVO> listaPais = new ArrayList<PaisVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaPais = lineaInvDAO.listarPaises();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaPais;
    }

    public List<ParAcademicoVO> listarPersonaParAcademico() throws Exception {
        List<ParAcademicoVO> listaPares = new ArrayList<ParAcademicoVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaPares = lineaInvDAO.listarPersonaParAcademico();
        } catch (Exception ex) {
            ex.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaPares;
    }

    public List<ParAcademicoVO> listarPersonasActivacionLinea(LineaInvestigacionVO lineaInvestigacionVO)
            throws Exception {
        List<ParAcademicoVO> listaPares = new ArrayList<ParAcademicoVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaPares = lineaInvDAO.listarPersonasActivacionLinea(lineaInvestigacionVO);
        } catch (Exception ex) {
            ex.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaPares;
    }

    public List<TipoEventoVO> listarTipoEventos() throws Exception {
        List<TipoEventoVO> listaTipoevento = new ArrayList<TipoEventoVO>();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            listaTipoevento = lineaInvDAO.listarTipoEventos();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaTipoevento;
    }

    public String modificarLinea(LineaInvestigacionVO lineaInvVO) throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.modificarLinea(lineaInvVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public void ingresarObservaciones(EstadoComplementoLineaInvVO complementoLineaInvVO) throws Exception {
        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            lineaInvDAO.ingresarObservaciones(complementoLineaInvVO);
            try {
                conexion.commit();
            } catch (ControlException ex) {
                try {
                    conexion.rollback();
                    ex.printStackTrace();
                    Logger.getLogger(LineaInvestigacionBO.class.getName()).log(Level.SEVERE, null, ex);
                    throw new Exception("Error al realizar commit", ex);
                } catch (ControlException ex1) {
                    ex1.printStackTrace();
                    Logger.getLogger(LineaInvestigacionBO.class.getName()).log(Level.SEVERE, null, ex1);
                    throw new Exception("Error al realizar rollback", ex1);
                }
            }
        } catch (DAOException ex) {
            ex.printStackTrace();
            Logger.getLogger(LineaInvestigacionBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new Exception("Error al ingresar comentarios", ex);
        }
    }

    public String aprobarLineaInv(EstadoComplementoLineaInvVO estCompLineaVO) throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.aprobarLineaInv(estCompLineaVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public String rechazarLineaInv(EstadoComplementoLineaInvVO estCompLineaVO) throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.rechazarLineaInv(estCompLineaVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public String activarLineaInv(EstadoComplementoLineaInvVO estCompLineaVO) throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.activarLineaInv(estCompLineaVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    /**
     * Elaborado por Jimmy Ramírez Duque, 29 de Septiembre de 2009
     * Obtiene las personas que se pueden asignar como pares academicos
     * @return Lista de Personas que se pueden asignar como pares academicos
     * @throws java.lang.Exception
     */
    public List<PersonaVO> obtenerParesAcademicos() throws Exception {
        dbConexion = conexion.openConnection();
        lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
        try {
            return lineaInvDAO.obtenerParesAcademicos();
        } catch (DAOException ex) {
            ex.printStackTrace();
            Logger.getLogger(LineaInvestigacionBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new Exception("Error al consultar la base de datos", ex);
        }
    }

    public String inactivarLineaInv(EstadoComplementoLineaInvVO estCompLineaVO) throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.inactivarLineaInv(estCompLineaVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public String consultarEstadoLinea(LineaInvestigacionVO lineaInvVO) throws Exception {
        String resultado = "";

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            resultado = lineaInvDAO.consultarEstadoLinea(lineaInvVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return resultado;
    }

    public ArchivoVO consultarArchivo(LineaInvestigacionVO lineaInvVO) throws Exception {
        ArchivoVO archivoVO = new ArchivoVO();

        try {
            dbConexion = conexion.openConnection();
            lineaInvDAO = new LineaInvestigacionDAO(dbConexion);
            archivoVO = lineaInvDAO.consultarArchivo(lineaInvVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return archivoVO;
    }
}
